C++ 1.2 (the version number corresponds to the release number of USL's cfront) corresponds to Bjarne Stroustrup's first edition ('The C++ Programming Language', ISBN 0-201-12078-X). In contrast, the present version (3.0) corresponds roughly to the 'ARM', except for exceptions. Here is a summary of the differences between the first edition of Bjarne's book and the ARM:
- A class can have more than one direct base class (multiple inheritance).
- Class members can be 'protected'.
- Pointers to class members can be declared and used.
- Operators 'new' and 'delete' can be overloaded and declared for a class.
This allows the "assignment to 'this'" technique for class specific
specific storage management to be removed to the anachronism section
- Objects can be explicitly destroyed.
- Assignment and Copy-Initialization default to member-wise assignment and
copy-initialization.
- The 'overload' keyword was made redundant and removed to the anachronism
section.
- General expressions are allowed as initializers for static objects.
- Data objects can be 'volatile' (new keyword).
- Initializers are allowed for 'static' class members.
- Member functions can be 'static'.
- Member functions can be 'const' or 'volatile'.
- Linkage to non-C++ program fragments can be explicitly declared.
- Operators '->', '->*' and ',' can be overloaded.
- Classes can be abstract.
- Prefix and postfix application of '++' and '--' on a user-defined type